package com.vmove.childtrain.protocol;


import com.vmove.childtrain.utils.ByteUtil;

/**
 * 亮灯控制协议
 */
public class LightCMD extends AbsProtocol implements Cloneable{

    public LightCMD() {
        setDataType(CommandType.COMMAND_LIGHT);
    }

    public Object clone() throws CloneNotSupportedException{
        return super.clone();
    }

    byte b0=0x00;//预留
    byte b1=0x00;//显示数字
    byte b2= Color.NULL.getByte();//显示颜色 0~7  默认0不亮
    byte b3= CheckMode.NULL.getByte();//检测模式 0~3 默认不检测
    byte b4=0x03;//红外灵敏度 1~10
    byte b5=0x05;//拍打灵敏度 1~10
    byte b6=0x05;//灯亮度 1~5
    byte b7= LightMode.NULL.getByte();//灯闪模式 1~3
    byte b8= VoiceMode.NULL.getByte();//声音模式 1~3
    byte b9= (byte) 0xFF;//超时时间 单位s,0xFF永不超时
    byte b10= Color.NULL.getByte();//触发完成后灯的颜色
    byte b11= (byte) 0x00;//触发完成后灯的颜色保持时间
    byte b12= Color.NULL.getByte();//超时后灯的颜色保持时间
    byte b13= (byte) 0x00;//超时后灯的颜色保持时间
    byte b14= (byte)0x00;//是否开启防冲突 默认00

    /**
     * 设置步骤码
     */
    public LightCMD setStepNum(byte n){
        b0 = n;
        return this;
    }

    /**
     * 设置步骤码
     */
    public LightCMD setStepNum(int n){
        b0 = ByteUtil.getBytes1(n)[0];
        return this;
    }

    /**
     * 设置显示数字
     */
    public LightCMD setShowNum(int n){
       b1 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     * 设置显示数字
     */
    public LightCMD setShowNum(byte n){
       b1 = n;
       return this;
    }

    /**
     * 设置亮灯颜色
     * 0-7（0=不亮，1=红，2=绿，3=蓝，4=黄，5=紫，6=青，7=白）
     */
    public LightCMD setLightColor(int n){
       b2 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    public LightCMD setLightColor(byte n){
       b2 = n;
       return this;
    }

    /**
     * 设置检测模式
     * 0-3 0不检测 1红外 2拍打 3都
     */
    public LightCMD setCheckMode(int n){
       b3 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    public LightCMD setCheckMode(byte n){
       b3 = n;
       return this;
    }

    /**
     * 设置红外灵敏度
     * 1~5
     */
    public LightCMD setInfraredSensitivity(int n){
       b4 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     * 设置拍打灵敏度
     * 1~5
     */
    public LightCMD setPatSensitivity(int n){
       b5 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     * 设置亮度
     * 1~5
     */
    public LightCMD setLightBrightness(int n){
       b6 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     * 设置灯闪动模式
     * 1不闪 2开始时闪动 3一直闪动
     */
    public LightCMD setLightFlash(int n){
       b7 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    public LightCMD setLightFlash(byte b7){
       this.b7 = b7;
       return this;
    }

    /**
     * 设置灯声音模式
     * 1无声  2开始时响 3感应时响
     */
    public LightCMD setLightVoice(int n){
       b8 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    public LightCMD setLightVoice(byte n){
       b8 = n;
       return this;
    }

    /**
     * 设置超时时间
     * （单位为1s），0xFF表示永不超时
     */
    public LightCMD setTimeLast(int n){
       b9 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     * 设置超时时间
     * （单位为1s），0xFF表示永不超时
     */
    public LightCMD setTimeLast(byte n){
       b9 = n;
       return this;
    }

    /**
     * 设置触发完成后灯的颜色
     * 0-7（0=不亮，1=红，2=绿，3=蓝，4=黄，5=紫，6=青，7=白）
     */
    public LightCMD setFinalLightColor(int n){
       b10 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    public LightCMD setFinalLightColor(byte b){
       b10 = b;
       return this;
    }

    /**
     * 设置触发完成后灯保持时间
     * （单位为1s），0xFF表示永不超时
     */
    public LightCMD setFinalTimeLast(int n){
       b11 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     *设置超时后颜色
     */
    public LightCMD setColorTimeOut(int n){
        b12 = ByteUtil.getBytes1(n)[0];
        return this;
    }

    /**
     *设置超时后颜色
     */
    public LightCMD setColorTimeOut(byte n){
        b12 = n;
        return this;
    }

    /**
     * 设置超时后灯保持时间
     * （单位为1s），0xFF表示永不超时
     */
    public LightCMD setChaoShiTimeOut(int n){
       b13 = ByteUtil.getBytes1(n)[0];
       return this;
    }

    /**
     * 设置超时后灯保持时间
     * （单位为1s），0xFF表示永不超时
     */
    public LightCMD setChaoShiTimeOut(byte n){
       b13 = n;
       return this;
    }

    public LightCMD setOpenConflict(byte b){
        b14 = b;
        return this;
    }



    @Override
    public byte[] getBytes() {
        data = new byte[]{b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14};
        return super.getBytes();
    }

    public enum Color{
        NULL((byte)0x00),
        RED((byte)0x01),
        GREEN((byte)0x02),
        BLUE((byte)0x03),
        YELLOW((byte)0x04),
        PURPLE((byte)0x05),
        QING((byte)0x06),
        WHITE((byte)0x07);

        byte color;

        private Color(byte c){
            this.color = c;
        }

        public byte getByte(){
            return color;
        }
    }

    public enum CheckMode{
        NULL((byte)0x00),
        Infrared((byte)0x01),
        PAT((byte)0x02),
        ALL((byte)0x03);

        byte mode;

        private CheckMode(byte c){
            this.mode = c;
        }

        public byte getByte(){
            return mode;
        }
    }

    public enum LightMode{
        NULL((byte)0x01),
        STARTLIGHT((byte)0x02),
        ALLLIGHT((byte)0x03);

        byte mode;

        private LightMode(byte c){
            this.mode = c;
        }

        public byte getByte(){
            return mode;
        }
    }

    public enum VoiceMode{
        NULL((byte)0x01),
        STARTVOICE((byte)0x02),
        SENSEVOICE((byte)0x03);

        byte mode;

        private VoiceMode(byte c){
            this.mode = c;
        }

        public byte getByte(){
            return mode;
        }
    }

    public enum OpenConflict{
        ON((byte)0x51),
        OFF((byte)0x52);

        byte mode;

        private OpenConflict(byte c){
            this.mode = c;
        }

        public byte getByte(){
            return mode;
        }
    }
}
